Introdução ao Record Linkage

Wagner Tassinari

wtassinari@gmail.com

DEMAT/ICE/UFRRJ & CIE/SMS-Rio

28/05/2023

O que é o Record Linkage

  • “… é uma solução para o problema em identificar registros em duas bases de dados que representam entidades idênticas, ou seja, registros considerados correspondentes…” (Fellegi IP & Sunter AB, 1969)

  • O mais comum é utilizar as chaves primárias (identificador único) já existentes nas bases de dados (ex: CPF, CNS, NIS, DNV, prontuário, código do município, código do setor censitário, etc.) ou até mesmo os próprios atributos inerentes a cada registro (ex: nome, nome da mãe, data de nascimento, nome do bairro, etc.)

  • teste3

Record Linkage em bases de dados do SUS

  • O Record Linkage, no contexto das bases de dados do Sistema Único de Saúde (SUS), é um processo essencial. Ele envolve a integração e comparação de registros de diferentes bases de dados para identificar registros que se referem ao mesmo indivíduo ou evento.

  • Um dos maiores desafios enfrentados pelas bases de dados do SUS é a ausência de um identificador único para os pacientes comum na maioria das bases de dados. Esta lacuna dificulta a identificação de um mesmo indivíduo em bases distintas, tornando mais complexa a tarefa de acompanhar e avaliar o histórico de saúde completo de uma pessoa.

Record Linkage em bases de dados do SUS

  • Por exemplo: um paciente pode ter registros no Sistema de Informações Hospitalares (SIH), no Sistema de Informações Ambulatoriais (SIA), e também no Sistema de Informações sobre Mortalidade (SIM). O Record Linkage permite que essas bases de dados distintas sejam unificadas, criando um perfil mais completo da trajetória de saúde do paciente.

  • Isso é crucial para a continuidade do cuidado dos indivíduos, a avaliação da qualidade dos serviços, a realização de estudos epidemiológicos e para o planejamento em saúde.

Tipos de Linkage

  • Manual

    • Não é viável à medida que o número de registros aumenta.
  • Determinístico

    • Identificação dos registros iguais em bases diferentes via chave primária.

    • Não funciona quando não existir chave primária ou ela não corresponder ao identificador único verdadeiro.

    • Podemos lançar mão de uma SLK (Statistical Linkage Key) como chave primária.

  • Probabilístico

    • Estimar a probabilidade de duas entidades serem iguais.

    • Lida com dados ausentes e variações na codificação.

Linkage Determinístico

Fonte: Fundamentos de Record Linkage e sua aplicação nas bases de dados do SUS

  • Visa avaliar se os pares de registros são exatamente iguais em ambas as bases de dados, de modo que a concordância precisa ser total para que dois registros sejam considerados como um match (par).

  • Percebam que em ambas as bases de dados, as variáveis são do tipo texto, portanto apenas os registros que são exatamente iguais serão pareados a partir de uma abordagem determinística.

Linkage Probabilístico

Fonte: Fundamentos de Record Linkage e sua aplicação nas bases de dados do SUS

  • Utilizando a mesma lógica do exemplo anterior, aqui podemos ver os mesmos indivíduos, porém com um atributo a mais (a data de nascimento).

  • Porém, visando resolver as limitações do método determinístico, o probabilístico irá permitir que em um vetor de comparação os resultados não se limitem apenas a 0 (falso) ou 1 (verdadeiro), isso quer dizer que os registros podem ser parcialmente iguais.

Linkage Probabilístico

  • Apesar do nome está escrito de maneira distinta, as datas de nascimento são idênticas e portanto, o método probabilístico vai identificar (a partir de um critério pré-definindo) que existe uma alta probabilidade de que sejam os mesmos sujeitos nas bases distintas.

Fluxo de um Linkage probabilístico

Figura 1: A note on using the F-measure for evaluating record linkage algorithms

Fluxo de um Linkage probabilístico

  • Pré-processamento: Limpeza e padronização dos dados, construção das chaves de relacionamento

  • Redução do espaço de pesquisa: Blocagem

  • Comparação: métricas de string, comparações de anos, comparações numéricas

  • Classificação: Modelo Fellegi-Sunter

  • Previsão final: pontos de corte, validação

Limpeza e padronização dos dados

  • A preparação de dados é uma etapa crucial antes de iniciar qualquer análise. Neste processo, é essencial padronizar elementos como por exemplo as datas de nascimento. É necessário normalizar este registro, ou seja, colocar um formato e um padrão único em ambas as bases que serão analisadas. Diferentes bases de dados podem apresentar as datas em estilos variados, como DD/MM/AAAA, MM/DD/AAAA, MM/DD/AA, DD-MM-AAAA, DDMMAAAA. Portanto, é necessário uniformizar estes formatos para assegurar a consistência entre diferentes conjuntos de dados que precisam ser combinados.

  • Além disso, uma prática comum na padronização é converter todos os campos de texto para letras maiúsculas e remover caracteres especiais, como Á, á, ç, Í, í, Ó, â.

  • Remoção das preposições.

Indexação e blocking

  • Desenvolvimento de chaves de relacionamento, por exemplo as Statistical Linkage Key (SLK).

  • Geralmente as SLK’s são formadas pela concatenação de atributos (ex: nome + nome da mãe + data do nascimento) de forma direta ou via criptografia (ex: HASH MD5).

  • Tais estratégias também podem ser usadas para o linkage determinístico.

Indexação e blocking

  • Visando otimizar o processamento computacional, as técnicas de blocagem irão estabelecer critérios de comparação com o intuito de reduzir os pares e diminuir o custo computacional quando grandes bases de dados forem pareadas.

  • Essa comparação é feita via estratégias de blocagem em alguns atributos inerente ao registros que possam ser agrupados, por exemplo: primeiro nome, ultimo nome, ano de nascimento, sexo, nome do bairro, etc.

Indexação e blocking

  • Nesta etapa, é possível o uso da função chamada Soundex, um algoritmo fonético usado principalmente para codificar palavras pela sonorização (frequentemente nomes próprios), ou seja, como eles são pronunciados, de modo que homófonos sejam codificados com a mesma codificação.

  • Isso torna o Soundex particularmente útil em aplicações onde se deseja encontrar nomes que soam semelhantes, apesar de serem escritos de formas diferentes.

  • Veja alguns exemplos do Soundex:

Exemplos do Soundex

stringdist::phonetic("Ana")
[1] "A500"
stringdist::phonetic("Anna")
[1] "A500"

Exemplos do Soundex

stringdist::phonetic("Rafael")
[1] "R140"
stringdist::phonetic("Raphael")
[1] "R140"

Exemplos do Soundex

stringdist::phonetic("Eloa")
[1] "E400"
stringdist::phonetic("Eloah")
[1] "E400"

Exemplos do Soundex

stringdist::phonetic("Ana")
[1] "A500"
stringdist::phonetic("Hana")
[1] "H500"

Exemplos do Soundex

stringdist::phonetic("Leandro")
[1] "L536"
stringdist::phonetic("Leonardo")
[1] "L563"

Comparação

  • Comparação dos atributos via métricas de similaridade. São medidas que irão avaliar a similaridade total ou parcial entre uma cadeia de caracteres que compõe uma palavra ou expressão, resultando em uma pontuação. As mais utilizadas são:
  • Jaccard: Mensura a similaridade entre dois conjuntos de strings quantificando a proporção de strings compartilhadas em relação ao total de strings únicas presentes nos dois registros.
  • Levenshtein: é uma métrica que mede o número mínimo de operações necessárias para transformar uma sequência de caracteres em outra.

Comparação

  • Jaro: calcula o número m de caracteres comuns que estão dentro da metade do comprimento da string mais longa e do número de transposições t
  • Jaro-Winkler: melhora o algoritmo Jaro aplicando ideias baseadas em estudos empíricos – Menos erros ocorrem no início das strings.

Exemplo dessas métricas de similaridade

# Chamando a biblioteca
library(stringdist)

# Entrando com os dados
nome1 <- "JOAO SANTO SOUSA"
nome2 <- "JOAO SANTOS SOUZA"
# Jaccard
jaccard_dist <- stringdist(nome1, nome2, method = "jaccard")
jaccard_sim <- 1 - jaccard_dist
print(paste("Jaccard Similarity: ", jaccard_sim))
[1] "Jaccard Similarity:  0.888888888888889"
# Levenshtein
levenshtein_dist <- stringdist(nome1, nome2, method = "lv")
levenshtein_sim <- 1 - (levenshtein_dist / max(nchar(nome1), nchar(nome2)))
print(paste("Levenshtein Similarity: ", levenshtein_sim))
[1] "Levenshtein Similarity:  0.882352941176471"
# Jaro
jaro_dist <- stringdist(nome1, nome2, method = "jw", p = 0)
jaro_sim <- 1 - jaro_dist
print(paste("Jaro Similarity: ", jaro_sim))
[1] "Jaro Similarity:  0.928308823529412"
# Jaro-Winkler
jaro_winkler_dist <- stringdist(nome1, nome2, method = "jw", p = 0.1)
jaro_winkler_sim <- 1 - jaro_winkler_dist
print(paste("Jaro-Winkler Similarity: ", jaro_winkler_sim))
[1] "Jaro-Winkler Similarity:  0.956985294117647"

Classificação

Modelo Fellegi-Sunter (1969)

  1. Comparação de Registros: Os registros dos bancos de dados são comparados usando diversos campos, como nome, data de nascimento, endereço, etc.

  2. Pontuação de Similaridade: Cada campo comparado recebe uma pontuação baseada em quão semelhantes são os valores. Por exemplo, nomes que são muito parecidos recebem uma pontuação alta.

  3. Regras de Decisão (modelo Fellegi-Sunter): As pontuações são combinadas para calcular uma pontuação total para cada par de registros. O modelo define três categorias para essa pontuação:

    • Match (Combinação): A pontuação é alta o suficiente para considerar que os registros pertencem à mesma entidade.

    • Non-Match (Não Combinação): A pontuação é baixa e os registros são considerados diferentes.

    • Possible Match (Possível Combinação): A pontuação está em uma faixa intermediária, sugerindo que pode ser necessário revisar manualmente.

  4. Ajuste dos Limiares: Os limiares que definem as categorias de combinação são ajustados para equilibrar a precisão (evitar falsos positivos) e a sensibilidade (evitar falsos negativos).

Pipeline Linkage entre SIM vs SINASC

Pipeline Linkage entre SIM vs SINASC

Ferramentas para Record Linkage

Conclusão

  • Na maioria das vezes, o processo determinístico de Record Linkage, será responsável pela maioria dos pares.

  • Para uma validação satisfatória de um processo de Record Linkage, quase sempre será necessário a revisão manual, até para validação do processo do Record Linkage.

  • Ultimamante, técnicas baseadas em Machine Learning, utilizam uma base de dados para treinamento de pares representativos de populações reais e distintas, é com isso é possível estimar os parâmetros para os limiares de decisão de forma a desenvolver modelos mais acertivos.

Exercício de Record Linkage em R

  • Nesta aula vamos utilizar dois bancos de dados simulados com informações hipotéticas para trabalhar um processo de linkage no R.

  • As variáveis de cada base de dados: id, nome do paciente, nome da mãe, sexo e sua data de nascimento.

  • Clique aqui para acessar o script e os dados hipotéticos em formato csv.

Referências

  • Camargo Jr. KR, Coeli CM. Reclink: aplicativo para o relacionamento de base de dados, implementando o método probabilistic record linkage. Cad Saúde Pública 2000; 16:439-47.

  • Camargo Jr, Kenneth Rochel de, and Claudia Medina Coeli. “Going open source: some lessons learned from the development of OpenRecLink.” Cadernos de Saúde Pública 31 (2015): 257-263.

  • FELLEGI, I. P. & SUNTER, A. B., 1969. A theory for record linkage.

  • FLORES, Patrícia Viana Guimarães. Escolaridade materna, peso ao nascer e mortalidade neonatal: análise de dois períodos no Estado do Rio de Janeiro. Tese (Doutorado Saúde Coletiva) -Instituto de Estudos de Saúde Coletiva, Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2013.

  • PRESTES, Isaías V. Pareamento de registros das grandes bases do SUS para permitir análises longitudinais de pacientes com câncer. Tese (Doutorado Epidemiologia) — Universidade Federal do Rio Grande do Sul, Porto Alegre, 2017.

  • Relatório do Banco mundial, disponível no site

  • Silva JPL, Travassos C, Vasconcellos MM, Campos LM. Revisão sistemática sobre encadeamento ou linkage de bases de dados secundários para uso em pesquisa em saúde no Brasil. Cad Saúde Colet (Rio J.) 2006; 14:197-224.